/*
 * Copyright (c) 2021, Polsys Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * File name: battery_manager.h
 * 
 * Description: 
 * 		BatteryMannager "静态类"。更新电池充电状态和参数,适用于有充电管理IC的场景。
 * 
 * Change Logs:
 * Date    		Author       Notes
 * 2021/02/28 	刘言         初版
 * 2022/10/19   刘言    支持只能获取电池电压的情况。
 */

#ifndef _BATTERY_MANAGER_H_
#define _BATTERY_MANAGER_H_

#include "bm_config.h"
#include "polsys_mcu.h"

//自定义类型

//事件
typedef enum _bm_event_t
{
	BMEV_DC_PULL_IN=0,	// 充电器接入
	BMEV_DC_PULL_OUT,	// 充电器移除
    BMEV_START_CHARGE,	// 开始充电（发生在充电器接入之后）
	BMEV_CHARGE_FULL,	// 已充满
	BMEV_VOLUME_CHANGE,	// 电量变化了
	BMEV_TEMP_CHANGE,	// 温度变化了
	BMEV_INITED,		// 已经初始化
	BMEV_CHRG_ERROR		// 错误
}bm_event_t;	

// 事件回调函数类型
typedef void (*bm_callback_t)(bm_event_t e, void *param); 	





// 为了节省代码量，曝光了一些属性

extern bit BM_DCConnected;
extern bit BM_IsCharging;
extern pdata u8 BM_Volume;				//电量百分比 %
extern pdata u16 BM_Voltage;			//电压	mV
#if (_BM_HAS_CC)
extern pdata u16 BM_ChrgCurrent;
#endif
#if (_BM_USE_TP)
extern pdata u8 BM_Temperature;
#endif

// 提供的API



#define BM_GetChargeStatus()		BM_IsCharging

#define BM_GetDCConnectStatus()		BM_DCConnected

// 获取电量百分比
#define BM_GetVolume()				BM_Volume

#define BM_GetVoltage()				BM_Voltage

#if (_BM_HAS_CC)
#define BM_GetChrgCurrent()			BM_ChrgCurrent
#endif

#if (_BM_USE_TP)
#define BM_GetTemperature()			BM_Temperature
#endif

/**
 * 初始化。可被调用多次。
 * @param reset true:电量会被按照当前电压重置
 */
void BM_Init(bool reset);

// 设置刷新状态，只要调用就会立即刷新一次
// true-使能刷新
// false-停止刷新
void BM_SetRefreshStatus(bool new_status);

void BM_SetCb(bm_callback_t new_cb, void *param);

#endif


